/**
 * Copyright (c) 2015-2019, Golly Hu 胡高 (3722711@qq.com).
 * <p>
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * <p>
 * http://www.apache.org/licenses/LICENSE-2.0
 * <p>
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package cn.hg.jfsa.manage.directive;

import java.util.List;
import java.util.Map;

import com.jfinal.aop.Aop;
import com.jfinal.core.Controller;
import com.jfinal.plugin.ehcache.CacheKit;
import com.jfinal.plugin.ehcache.IDataLoader;
import com.jfinal.template.Env;
import com.jfinal.template.io.Writer;
import com.jfinal.template.stat.Scope;

import cn.hg.base.jfinal.directive.annotation.JfsaDirective;
import cn.hg.jfsa.common.directive.BaseDirective;
import cn.hg.jfsa.core.JfsaThreadLocal;
import cn.hg.jfsa.manage.service.PagesService;
import cn.hg.jfsa.model.Pages;

/**
 * @author Golly
 */
@JfsaDirective ("pagesList")
public class PagesListDirective extends BaseDirective {

	@Override
	public boolean hasEnd () {
		return true;
	}

	/*
	 */
	@Override
	public void onRender (Env env, Scope scope, Writer writer) {
		Controller c = JfsaThreadLocal.getController();
		int pageNumber = this.getPara("pageNumber", scope, c.getParaToInt("pageNumber", 1));
		int pageSize = this.getPara("pageSize", scope, c.getParaToInt("pageSize", 10));
		Map<String, Object> paraMap = this.getAssignedParaMap(scope);
		paraMap.put("pageNumber", pageNumber);
		paraMap.put("pageSize", pageSize);
		List<Pages> list = CacheKit.get("pages", "pagesList_" + paraMap.toString(), new IDataLoader() {

			@Override
			public Object load () {
				return PagesListDirective.this.getPagesService().getPagesList();
			}

		});
		scope.setLocal(this.getPara("var", scope, "pagesList"), list);
		this.renderBody(env, scope, writer);
	}

	private PagesService getPagesService () { return Aop.get(PagesService.class); }

}
